+++ /dev/null
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using Microsoft.Xna.Framework;
-using Microsoft.Xna.Framework.Graphics;
-
-namespace SuperPolarity
-{
- class Ship : Actor
- {
- public enum Polarity : byte { Negative, Positive, Neutral };
-
- protected uint HP;
- public Polarity CurrentPolarity;
- public uint MagneticRadius;
-
- protected float FleeVelocity;
- protected float ActVelocity;
- protected float ChargeVelocity;
- protected int RepelRadius;
-
- protected bool Magnetizing;
-
- public Ship(Game newGame) : base(newGame) {
- MagneticRadius = 250;
- RepelRadius = 100;
-
- FleeVelocity = 5;
- ActVelocity = 3;
- ChargeVelocity = 1.5f;
- CurrentPolarity = Polarity.Neutral;
- Magnetizing = false;
- }
-
- public virtual void SwitchPolarity()
- {
- if (CurrentPolarity == Polarity.Positive)
- {
- CurrentPolarity = Polarity.Negative;
- }
- else
- {
- CurrentPolarity = Polarity.Positive;
- }
- }
-
- public virtual void SetPolarity(Polarity newPolarity)
- {
- CurrentPolarity = newPolarity;
- }
-
- public virtual void Shoot()
- {
- }
-
- public override void Update(GameTime gameTime)
- {
- base.Update(gameTime);
- Magnetizing = false;
- }
-
- public virtual void Magnetize(Ship ship, float distance, float angle)
- {
- Magnetizing = true;
- Polarity polarity = ship.CurrentPolarity;
-
- if (polarity != CurrentPolarity)
- {
- Attract(angle);
- }
- else
- {
- Repel(distance, angle);
- }
- }
-
- protected void Attract(float angle)
- {
- Velocity.X = (float) (ChargeVelocity * Math.Cos(angle));
- Velocity.Y = (float) (ChargeVelocity * Math.Sin(angle));
- }
-
- protected void Repel(float distance, float angle)
- {
- if (distance > RepelRadius) { Magnetizing = false; return; }
- Velocity.X = -(float)(FleeVelocity * Math.Cos(angle));
- Velocity.Y = -(float)(FleeVelocity * Math.Sin(angle));
- }
- }
-}